#ifndef __BALLCLOCK_H__
#define __BALLCLOCK_H__

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define N 27

typedef int data_t;

// 定义链表节点
typedef struct node
{
    data_t data;
    struct node *next;
} linknode_t;

// 定义栈
typedef struct
{
    linknode_t *top; // 栈顶指针
    int n; // 当前栈中元素个数
}linkstack_t;

// 定义队列
typedef struct
{
    linknode_t *front; // 队头指针
    linknode_t *rear; // 队尾指针
}linkqueue_t;

// 初始化栈
extern linkstack_t *init_linkstack();
// 判断栈是否为空 1:空 0:非空
extern int is_empty_linkstack(linkstack_t *s);
// 数据入栈
extern void push_linkstack(linkstack_t *s, data_t data);
// 数据出栈
extern data_t pop_linkstack(linkstack_t *s);
// 栈顶数据
extern data_t get_top_linkstack(linkstack_t *s);

// 初始化队列
extern linkqueue_t *init_linkqueue();
// 判断队列是否为空 1:空 0:非空
extern int is_empty_linkqueue(linkqueue_t *q);
// 数据入队
extern void enter_linkqueue(linkqueue_t *q, data_t data);
// 数据出队
extern data_t delete_linkqueue(linkqueue_t *q);

extern int print_linklist(linknode_t *head);
extern int is_orginal_queue(linkqueue_t *q);
extern int ball_clock();

#endif